asm-offsets.s: $(TARGET_SUBARCH)/asm-offsets.c
$(CC) $(CFLAGS) -S -o $@ $<
-xen.lds: $(TARGET_SUBARCH)/xen.lds.S
+xen.lds: xen.lds.S
$(CC) -P -E -Ui386 $(AFLAGS) -o $@ $<
boot/mkelf32: boot/mkelf32.c
init_domheap_pages(initial_images_base, initial_images_end);
}
-extern char __per_cpu_start[], __per_cpu_data_end[], __per_cpu_end[];
+extern char __init_begin[], __bss_start[];
+extern char __per_cpu_start[], __per_cpu_data_end[];
static void __init percpu_init_areas(void)
{
#ifndef MEMORY_GUARD
init_xenheap_pages(__pa(__per_cpu_start) + (first_unused << PERCPU_SHIFT),
- __pa(__per_cpu_end));
+ __pa(__bss_start));
#endif
memguard_guard_range(&__per_cpu_start[first_unused << PERCPU_SHIFT],
- (NR_CPUS - first_unused) << PERCPU_SHIFT);
+ __bss_start - &__per_cpu_start[first_unused <<
+ PERCPU_SHIFT]);
#if defined(CONFIG_X86_64)
/* Also zap the mapping in the 1:1 area. */
memguard_guard_range(__va(__pa(__per_cpu_start)) +
/* initialize first time */
if ( !xen_regions[0].s )
{
- extern char __init_begin[], __bss_start[];
-
/* S3 resume code (and other real mode trampoline code) */
xen_regions[0].s = bootsym_phys(trampoline_start);
xen_regions[0].e = bootsym_phys(trampoline_end);
+++ /dev/null
-/* ld script to make i386 Linux kernel
- * Written by Martin Mares <mj@atrey.karlin.mff.cuni.cz>
- * Modified for i386 Xen by Keir Fraser
- */
-
-#include <xen/config.h>
-#include <xen/cache.h>
-#include <asm/page.h>
-#include <asm/percpu.h>
-#undef ENTRY
-#undef ALIGN
-
-OUTPUT_FORMAT("elf32-i386", "elf32-i386", "elf32-i386")
-OUTPUT_ARCH(i386)
-ENTRY(start)
-PHDRS
-{
- text PT_LOAD ;
-}
-SECTIONS
-{
- . = 0xFF000000 + 0x100000;
- _start = .;
- _stext = .; /* Text and read-only data */
- .text : {
- *(.text)
- *(.fixup)
- *(.gnu.warning)
- } :text =0x9090
-
- _etext = .; /* End of text section */
-
- .rodata : { *(.rodata) *(.rodata.*) } :text
-
- . = ALIGN(32); /* Exception table */
- __start___ex_table = .;
- __ex_table : { *(__ex_table) } :text
- __stop___ex_table = .;
-
- . = ALIGN(32); /* Pre-exception table */
- __start___pre_ex_table = .;
- __pre_ex_table : { *(__pre_ex_table) } :text
- __stop___pre_ex_table = .;
-
- .data : { /* Data */
- *(.data)
- CONSTRUCTORS
- } :text
-
- . = ALIGN(128);
- .data.read_mostly : { *(.data.read_mostly) } :text
-
- . = ALIGN(4096); /* Init code and data */
- __init_begin = .;
- _sinittext = .;
- .init.text : { *(.init.text) } :text
- _einittext = .;
- .init.data : { *(.init.data) } :text
- . = ALIGN(32);
- __setup_start = .;
- .init.setup : { *(.init.setup) } :text
- __setup_end = .;
- __initcall_start = .;
- .initcall.init : { *(.initcall1.init) } :text
- __initcall_end = .;
- __xsm_initcall_start = .;
- .xsm_initcall.init : { *(.xsm_initcall.init) } :text
- __xsm_initcall_end = .;
- . = ALIGN(PAGE_SIZE);
- __init_end = .;
-
- __per_cpu_shift = PERCPU_SHIFT; /* kdump assist */
- .data.percpu : {
- __per_cpu_start = .;
- *(.data.percpu)
- . = ALIGN(SMP_CACHE_BYTES);
- *(.data.percpu.read_mostly)
- __per_cpu_data_end = .;
- } :text
- . = __per_cpu_start + (NR_CPUS << PERCPU_SHIFT);
- . = ALIGN(PAGE_SIZE);
- __per_cpu_end = .;
-
- __bss_start = .; /* BSS */
- .bss : {
- . = ALIGN(STACK_SIZE);
- *(.bss.stack_aligned)
- . = ALIGN(PAGE_SIZE);
- *(.bss.page_aligned)
- *(.bss)
- } :text
- _end = . ;
-
- /* Sections to be discarded */
- /DISCARD/ : {
- *(.exit.text)
- *(.exit.data)
- *(.exitcall.exit)
- *(.eh_frame)
- }
-
- /* Stabs debugging sections. */
- .stab 0 : { *(.stab) }
- .stabstr 0 : { *(.stabstr) }
- .stab.excl 0 : { *(.stab.excl) }
- .stab.exclstr 0 : { *(.stab.exclstr) }
- .stab.index 0 : { *(.stab.index) }
- .stab.indexstr 0 : { *(.stab.indexstr) }
- .comment 0 : { *(.comment) }
-}
+++ /dev/null
-/* Excerpts written by Martin Mares <mj@atrey.karlin.mff.cuni.cz> */
-/* Modified for x86-64 Xen by Keir Fraser */
-
-#include <xen/config.h>
-#include <xen/cache.h>
-#include <asm/page.h>
-#include <asm/percpu.h>
-#undef ENTRY
-#undef ALIGN
-
-OUTPUT_FORMAT("elf64-x86-64", "elf64-x86-64", "elf64-x86-64")
-OUTPUT_ARCH(i386:x86-64)
-ENTRY(start)
-PHDRS
-{
- text PT_LOAD ;
-}
-SECTIONS
-{
- . = __XEN_VIRT_START + 0x100000;
- _start = .;
- _stext = .; /* Text and read-only data */
- .text : {
- *(.text)
- *(.fixup)
- *(.gnu.warning)
- } :text = 0x9090
-
- _etext = .; /* End of text section */
-
- .rodata : { *(.rodata) *(.rodata.*) } :text
-
- . = ALIGN(32); /* Exception table */
- __start___ex_table = .;
- __ex_table : { *(__ex_table) } :text
- __stop___ex_table = .;
-
- . = ALIGN(32); /* Pre-exception table */
- __start___pre_ex_table = .;
- __pre_ex_table : { *(__pre_ex_table) } :text
- __stop___pre_ex_table = .;
-
- .data : { /* Data */
- *(.data)
- CONSTRUCTORS
- } :text
-
- . = ALIGN(128);
- .data.read_mostly : { *(.data.read_mostly) } :text
-
- . = ALIGN(4096); /* Init code and data */
- __init_begin = .;
- _sinittext = .;
- .init.text : { *(.init.text) } :text
- _einittext = .;
- .init.data : { *(.init.data) } :text
- . = ALIGN(32);
- __setup_start = .;
- .init.setup : { *(.init.setup) } :text
- __setup_end = .;
- __initcall_start = .;
- .initcall.init : { *(.initcall1.init) } :text
- __initcall_end = .;
- __xsm_initcall_start = .;
- .xsm_initcall.init : { *(.xsm_initcall.init) } :text
- __xsm_initcall_end = .;
- . = ALIGN(PAGE_SIZE);
- __init_end = .;
-
- __per_cpu_shift = PERCPU_SHIFT; /* kdump assist */
- .data.percpu : {
- __per_cpu_start = .;
- *(.data.percpu)
- . = ALIGN(SMP_CACHE_BYTES);
- *(.data.percpu.read_mostly)
- __per_cpu_data_end = .;
- } :text
- . = __per_cpu_start + (NR_CPUS << PERCPU_SHIFT);
- . = ALIGN(PAGE_SIZE);
- __per_cpu_end = .;
-
- __bss_start = .; /* BSS */
- .bss : {
- . = ALIGN(STACK_SIZE);
- *(.bss.stack_aligned)
- . = ALIGN(PAGE_SIZE);
- *(.bss.page_aligned)
- *(.bss)
- } :text
- _end = . ;
-
- /* Sections to be discarded */
- /DISCARD/ : {
- *(.exit.text)
- *(.exit.data)
- *(.exitcall.exit)
- *(.eh_frame)
- }
-
- /* Stabs debugging sections. */
- .stab 0 : { *(.stab) }
- .stabstr 0 : { *(.stabstr) }
- .stab.excl 0 : { *(.stab.excl) }
- .stab.exclstr 0 : { *(.stab.exclstr) }
- .stab.index 0 : { *(.stab.index) }
- .stab.indexstr 0 : { *(.stab.indexstr) }
- .comment 0 : { *(.comment) }
-}
--- /dev/null
+/* Excerpts written by Martin Mares <mj@atrey.karlin.mff.cuni.cz> */
+/* Modified for i386/x86-64 Xen by Keir Fraser */
+
+#include <xen/config.h>
+#include <xen/cache.h>
+#include <asm/page.h>
+#include <asm/percpu.h>
+#undef ENTRY
+#undef ALIGN
+
+#ifdef __x86_64__
+OUTPUT_FORMAT("elf64-x86-64", "elf64-x86-64", "elf64-x86-64")
+OUTPUT_ARCH(i386:x86-64)
+#else
+OUTPUT_FORMAT("elf32-i386", "elf32-i386", "elf32-i386")
+OUTPUT_ARCH(i386)
+#endif
+
+ENTRY(start)
+PHDRS
+{
+ text PT_LOAD ;
+}
+SECTIONS
+{
+ . = __XEN_VIRT_START + 0x100000;
+ _start = .;
+ .text : {
+ _stext = .; /* Text and read-only data */
+ *(.text)
+ *(.fixup)
+ *(.gnu.warning)
+ _etext = .; /* End of text section */
+ } :text = 0x9090
+
+ .rodata : {
+ *(.rodata)
+ *(.rodata.*)
+ } :text
+
+ . = ALIGN(32); /* Exception table */
+ __ex_table : {
+ __start___ex_table = .;
+ *(__ex_table)
+ __stop___ex_table = .;
+ } :text
+
+ . = ALIGN(32); /* Pre-exception table */
+ __pre_ex_table : {
+ __start___pre_ex_table = .;
+ *(__pre_ex_table)
+ __stop___pre_ex_table = .;
+ } :text
+
+ .data : { /* Data */
+ *(.data)
+ CONSTRUCTORS
+ } :text
+
+ . = ALIGN(128);
+ .data.read_mostly : {
+ *(.data.read_mostly)
+ } :text
+
+ . = ALIGN(4096); /* Init code and data */
+ __init_begin = .;
+ .init.text : {
+ _sinittext = .;
+ *(.init.text)
+ _einittext = .;
+ } :text
+ .init.data : {
+ *(.init.data)
+ } :text
+ . = ALIGN(32);
+ .init.setup : {
+ __setup_start = .;
+ *(.init.setup)
+ __setup_end = .;
+ } :text
+ .initcall.init : {
+ __initcall_start = .;
+ *(.initcall1.init)
+ __initcall_end = .;
+ } :text
+ .xsm_initcall.init : {
+ __xsm_initcall_start = .;
+ *(.xsm_initcall.init)
+ __xsm_initcall_end = .;
+ } :text
+ . = ALIGN(PAGE_SIZE);
+ __init_end = .;
+
+ __per_cpu_shift = PERCPU_SHIFT; /* kdump assist */
+ .data.percpu : {
+ __per_cpu_start = .;
+ *(.data.percpu)
+ . = ALIGN(SMP_CACHE_BYTES);
+ *(.data.percpu.read_mostly)
+ __per_cpu_data_end = .;
+ } :text
+ . = __per_cpu_start + (NR_CPUS << PERCPU_SHIFT);
+ . = ALIGN(PAGE_SIZE);
+
+ /*
+ * Do not insert anything here - the unused portion of .data.percpu
+ * will be freed/unmapped up to __bss_start (defined below).
+ */
+
+ .bss : { /* BSS */
+ . = ALIGN(STACK_SIZE);
+ __bss_start = .;
+ *(.bss.stack_aligned)
+ . = ALIGN(PAGE_SIZE);
+ *(.bss.page_aligned)
+ *(.bss)
+ } :text
+ _end = . ;
+
+ /* Sections to be discarded */
+ /DISCARD/ : {
+ *(.exit.text)
+ *(.exit.data)
+ *(.exitcall.exit)
+ *(.eh_frame)
+ }
+
+ /* Stabs debugging sections. */
+ .stab 0 : { *(.stab) }
+ .stabstr 0 : { *(.stabstr) }
+ .stab.excl 0 : { *(.stab.excl) }
+ .stab.exclstr 0 : { *(.stab.exclstr) }
+ .stab.index 0 : { *(.stab.index) }
+ .stab.indexstr 0 : { *(.stab.indexstr) }
+ .comment 0 : { *(.comment) }
+}